package Bill.app.client;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.*;

import Bill.util.Configuration;

public class ChangerIdentifiant extends JFrame
    implements ActionListener, ItemListener
{

    ChangerIdentifiant(String login, JLabel log)
    {
        super("BHZMessenger 1.0.0       changement d'identifiant");
        info = new JLabel();
        labelNpass = new JLabel("veuillez donner votre nouveau mot de Pass:");
        labelApass = new JLabel("<html><body>veuillez saisir <br> votre ancien mot<br> de pass:</body></html>");
        labelAlogin = new JLabel("<html><body>veuillez saisir<br> votre ancien <br>login:</body></html>");
        labelNlogin = new JLabel("<html><body>veuillez donner <br>votre nouveau<br> login:</body></html>");
        ancienLogin = null;
        nouveauLogin = null;
        ancienPass = null;
        nouveauPass = null;
        passChange = null;
        loginChange = null;
        Valider = null;
        this.login = null;
        this.log = null;
        setIconImage((new ImageIcon("images.jpg")).getImage());
        ancienLogin = new JTextField(50);
        nouveauLogin = new JTextField(50);
        this.login = login;
        this.log = log;
        ancienPass = new TextField(50);
        nouveauPass = new TextField(50);
        passChange = new Checkbox("changer  pass");
        loginChange = new Checkbox("changer login");
        Valider = new JButton("Valider");
        Valider.setEnabled(false);
        loginChange.setVisible(true);
        passChange.setVisible(true);
        nouveauLogin.setVisible(false);
        ancienLogin.setVisible(false);
        labelAlogin.setVisible(false);
        labelNlogin.setVisible(false);
        nouveauPass.setVisible(false);
        ancienPass.setVisible(false);
        labelNpass.setVisible(false);
        labelApass.setVisible(false);
        ancienLogin.setText("");
        nouveauPass.setText("");
        nouveauLogin.setText("");
        ancienPass.setText("");
        nouveauPass.setEchoChar('*');
        ancienPass.setEchoChar('*');
        Valider.setToolTipText("Envoi des informations au serveur");
        Valider.setMnemonic('V');
        ancienLogin.setToolTipText("veuillez donner votre ancien login");
        nouveauLogin.setToolTipText("tapez le nouveau login");
        JPanel panneau = new JPanel();
        panneau.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("CHANGEMENT D'IDENTIFIANT"), BorderFactory.createEmptyBorder(5, 5, 5, 5)), panneau.getBorder()));
        panneau.setLayout(new GridLayout(0, 2));
        add("Center", panneau);
        JPanel pansouth = new JPanel();
        add("South", pansouth);
        pansouth.setLayout(new BorderLayout());
        pansouth.add("East", Valider);
        pansouth.add("Center", info);
        panneau.setVisible(true);
        JPanel panGauche = new JPanel();
        JPanel panDroite = new JPanel();
        panGauche.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("CHANGEMENT DE LOGIN"), BorderFactory.createEmptyBorder(5, 5, 5, 5)), panGauche.getBorder()));
        panDroite.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("CHANGEMENT DE PASS"), BorderFactory.createEmptyBorder(5, 5, 5, 5)), panDroite.getBorder()));
        panneau.add(panGauche);
        panneau.add(panDroite);
        panGauche.setVisible(true);
        panDroite.setVisible(true);
        panGauche.setLayout(new GridLayout(3, 2));
        panDroite.setLayout(new GridLayout(3, 2));
        panGauche.add(loginChange);
        panGauche.add(new Canvas());
        panGauche.add(labelAlogin);
        panGauche.add(ancienLogin);
        panGauche.add(labelNlogin);
        panGauche.add(nouveauLogin);
        panDroite.add(passChange);
        panDroite.add(new Canvas());
        panDroite.add(labelApass);
        panDroite.add(ancienPass);
        panDroite.add(labelNpass);
        panDroite.add(nouveauPass);
        passChange.addItemListener(this);
        loginChange.addItemListener(this);
        Valider.addActionListener(this);
        setResizable(false);
        setSize(500, 290);
        Dimension dimensionecran = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation((dimensionecran.width - getWidth()) / 2, (dimensionecran.height - getHeight()) / 2);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent arg0)
    {
        if(loginChange.getState() && passChange.getState() && (ancienLogin.getText().compareToIgnoreCase("") == 0 || nouveauLogin.getText().compareToIgnoreCase("") == 0 || ancienPass.getText().compareToIgnoreCase("") == 0 || nouveauPass.getText().compareToIgnoreCase("") == 0) || loginChange.getState() && (ancienLogin.getText().compareToIgnoreCase("") == 0 || nouveauLogin.getText().compareToIgnoreCase("") == 0) || passChange.getState() && (ancienPass.getText().compareToIgnoreCase("") == 0 || nouveauPass.getText().compareToIgnoreCase("") == 0 || ancienLogin.getText().compareToIgnoreCase("") == 0))
        {
            info.setText("quelques champs sont vides!!");
        } else
        {
            String message = "";
            if(loginChange.getState() && passChange.getState())
                message = (new StringBuilder("6:LP:")).append(ancienLogin.getText()).append(":").append(nouveauLogin.getText()).append(":").append(ancienPass.getText()).append(":").append(nouveauPass.getText()).toString();
            else
            if(loginChange.getState())
                message = (new StringBuilder("6:L:")).append(ancienLogin.getText()).append(":").append(nouveauLogin.getText()).toString();
            else
            if(passChange.getState())
                message = (new StringBuilder("6:P:")).append(ancienLogin.getText().trim()).append(":").append(ancienPass.getText()).append(":").append(nouveauPass.getText()).toString();
            info.setText("envoi en cours...");
            try
            {
                   Configuration.loadConfiguration();
                 Socket  messagerie = new Socket(Configuration.IPserveur, Configuration.Config_portServeur);
                
                BufferedReader messagerieLecture = new BufferedReader(new InputStreamReader(messagerie.getInputStream()));
                String mes = message;
                (new PrintWriter(new BufferedWriter(new OutputStreamWriter(messagerie.getOutputStream())), true)).println(mes);
                message = messagerieLecture.readLine();
                messagerie.close();
                if(message.compareToIgnoreCase("SUCCESS_LP") == 0)
                {
                    JOptionPane.showMessageDialog(null, (new StringBuilder("<html><body>votre login et mot de pass ont \351t\351 bien modifi\351s:<br>votre nouveau Login:<h1>")).append(nouveauLogin.getText()).append("</h1><br>nouveau pass:<h1>").append(nouveauPass.getText()).append("</h1><br>les notifications seront prises en comptes \340 la prochaine conexion<br><br>merci!</body></html>").toString());
                    log.setToolTipText(nouveauLogin.getText().trim());
                    setVisible(false);
                } else
                if(message.compareToIgnoreCase("SUCCESS_P") == 0)
                {
                    JOptionPane.showMessageDialog(null, (new StringBuilder("<html><body>votre mot de pas a \351t\351 bien modifi\351<br>votre nouveau pass:<h1>")).append(nouveauPass.getText()).append("</h1><br>les notifications seront prises en comptes \340 la prochaine conexion<br><br>merci!</body></html>").toString());
                    setVisible(false);
                } else
                if(message.compareToIgnoreCase("SUCCESS_L") == 0)
                {
                    JOptionPane.showMessageDialog(null, (new StringBuilder("<html><body><h1>votre login a \351t\351 bien modifi\351<br>votre nouveau login:<h1>")).append(nouveauLogin.getText()).append("</h1><br>les notifications seront prises en comptes \340 la prochaine conexion<br>merci!</body></html>").toString());
                    log.setToolTipText(nouveauLogin.getText().trim());
                    setVisible(false);
                } else
                {
                    info.setText("<html><body>erreur lors du traitement<br>veuillez bien <br>verifier vos informations <br></body> </html>");
                    nouveauLogin.setText("");
                    ancienLogin.setText("");
                    nouveauPass.setText("");
                    ancienPass.setText("");
                }
            }
            catch(UnknownHostException e)
            {
                info.setText("erreur lors de l'envoi");
            }
            catch(IOException e)
            {
                info.setText("erreur lors de l'envoi");
            }
        }
    }

    public void itemStateChanged(ItemEvent e)
    {
        if(e.getSource() == loginChange)
        {
            if(e.getStateChange() == 1)
            {
                nouveauLogin.setVisible(true);
                ancienLogin.setVisible(true);
                labelAlogin.setVisible(true);
                labelNlogin.setVisible(true);
                Valider.setEnabled(true);
            } else
            {
                nouveauLogin.setVisible(false);
                ancienLogin.setVisible(false);
                labelAlogin.setVisible(false);
                labelNlogin.setVisible(false);
                Valider.setEnabled(false);
            }
        } else
        if(e.getSource() == passChange)
            if(e.getStateChange() == 1)
            {
                labelAlogin.setVisible(true);
                ancienLogin.setVisible(true);
                nouveauPass.setVisible(true);
                ancienPass.setVisible(true);
                labelNpass.setVisible(true);
                labelApass.setVisible(true);
                Valider.setEnabled(true);
            } else
            {
                labelAlogin.setVisible(true);
                ancienLogin.setVisible(false);
                nouveauPass.setVisible(false);
                ancienPass.setVisible(false);
                labelNpass.setVisible(false);
                Valider.setEnabled(false);
            }
    }

    private static final long serialVersionUID = 1L;
    JLabel info;
    JLabel labelNpass;
    JLabel labelApass;
    JLabel labelAlogin;
    JLabel labelNlogin;
    JTextField ancienLogin;
    JTextField nouveauLogin;
    TextField ancienPass;
    TextField nouveauPass;
    Checkbox passChange;
    Checkbox loginChange;
    JButton Valider;
    String login;
    JLabel log;
}
